# -*- coding: utf-8 -*-
#!/usr/bin/python3
from neibor_tools import neibor_update
from topo_client import TopoClient
import time
import random
import threading
import sys
import argparse


parser = argparse.ArgumentParser(description='战术网无线交换机路由发现组件')
parser.add_argument('-n', '--net', default='10.0.0.0/24',
                    type=str, help='交换机所在Ad_Hoc网络网段')
parser.add_argument('-w', '--wait', default=5, type=int, help='arp测试超时时间')
parser.add_argument('-i', '--interface', default='eth0',
                    type=str, help='交换机连接Ad_Hoc网段的接口')
parser.add_argument('-a', '--address', default='10.0.1.20',
                    type=str, help='控制器IP')
parser.add_argument('-b', '--break_address', default=None,
                    type=str, help='备用控制器IP')
parser.add_argument('-p', '--port', default=6699, type=int, help='控制器端口')
<<<<<<< HEAD
parser.add_argument('-q', '--break_port', default=0,
=======
parser.add_argument('-q', '--break_port', default=6699,
>>>>>>> 65743b7ca29b9b630727da9c3f4b2bef9b5344a3
                    type=int, help='备用控制器端口')
parser.add_argument('--min_update', default=5, type=int, help='最短更新等待时间')
parser.add_argument('--max_update', default=10, type=int, help='最长更新等待时间')
parser.add_argument('-l', '--listen_port', default=0, type=int, help='默认监听端口')
args = parser.parse_args()

# 初始化信息
net = args.net  # 交换机所在Ad_Hoc网络网段
timeout = args.wait  # arp测试超时时间
iface = args.interface  # 交换机连接Ad_Hoc网段的接口
controller_IP = args.address  # 控制器IP
controller_port = args.port  # 控制器端口
break_IP = args.break_address  # 备用控制器IP
break_port = args.break_port  # 备用控制器端口
min_wait = args.min_update  # 最短更新等待时间
max_wait = args.max_update  # 最长更新等待时间
listen_port = args.listen_port # 监听端口


def main():
    nu = neibor_update(net, timeout, iface)
    tc = TopoClient(controller_IP, controller_port,
                    iface, break_IP, break_port, listen_port)
<<<<<<< HEAD
=======
    if break_IP and break_port:
        tc.init(break_controller=True) # 先初始化与从控制器的连接
>>>>>>> 65743b7ca29b9b630727da9c3f4b2bef9b5344a3
    tc.init()  # 初始化与控制器的连接
    threading.Thread(target=tc.listen_mac).start()  # 开启mac监听线程
    while True:
        connect_neibors, lost_neibots = next(nu)
        tc.update_topo(connect_neibors, lost_neibots)
        time.sleep(random.uniform(min_wait, max_wait))


if __name__ == '__main__':
    main()
